<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 外层长度-1 内层长度-1-i
        // var arr = [2, 1, 4, 3, 5]
        // for (var i = 0; i < arr.length - 1; i++) {
        //     for (var j = 0; j < arr.length - 1 - i; j++) {
        //         if (arr[j] > arr[j + 1]) {
        //             var temp = arr[j]
        //             arr[j] = arr[j + 1]
        //             arr[j + 1] = temp
        //         }
        //     }
        // }



        // 手写call 

        // es6面试的时候
        // Set 集合 数组去重
        // Map 和对象差不多，但是它的属性名可以是任意类型
        // Symbol 唯一的值 身份证号 唯一

        // function fn(m, n) {
        //     console.log(m, n);
        //     console.log(this);
        // }

        // // fn(2, 3)
        // var obj = {

        // }

        // fn.call(undefined, 2, 3)

        // function fn(){}
        // var fn = function(){}
        // // var fn = new Function() Function.prototype

        // 面一家很难 多面
        // var obj = {
        //     a: 100,
        //     fn: function () { }
        // }

        // // function fn() {
        // //     console.log(this.a);
        // // }

        // // // obj.fn()
        // obj.fn = fn
        // obj.fn()

        // // obj.fn()
        // obj.fn = fn 
        // obj.fn()

        // this就是fn 
        // var fn = new Function()

        // 第一版 
        // Function.prototype.call = Function.prototype.call || function (context) {
        //     context = context || window
        //     context.fn = this//this就是fn obj.fn = fn 
        //     return context.fn()//obj.fn()
        // }


        Function.prototype.call = Function.prototype.call || function (context, ...args) {
            context = context || window
            var fnName = Symbol()
            context[fnName] = this//this就是fn obj.fn = fn 
            var res = context[fnName](...args)
            delete context[fnName]
            return res
        }


        // Array.prototype.add = function(){
        //     console.log(this);
        // }

    

        var obj = {
            a:1,
            function(){
                
            }
        }
    </script>
</body>

</html>